/*
 * Servidor.h
 *
 *  Created on: 28/05/2012
 *      Author: sebastian
 */

#ifndef SERVIDOR_H_
#define SERVIDOR_H_

//#include "Worker.h"
#include "Respuesta.h"
#include "common_Thread.h"
#include <vector>
#include "ColaDeEntrada.h"
#include <list>
#include "common.h"
#include "common_Socket.h"
#include "Datos.h"
#include "Validador.h"
#include "Manejador_Agentes.h"

class Hilo_Recibidor;
class Hilo_Enviador;
class Worker;

#define MAX_WORKERS 1

class Servidor : public Thread {
public:
	Servidor(std::string serv_port, Validador& val);
	virtual ~Servidor();
	Cola<Consulta*>* getColaConsultas();
	//Cola<Respuesta*> getColaRespuestas();
	Respuesta* popRespuesta();
	Consulta* popConsulta();
	void pushRespuesta(Respuesta* r);
	void pushConsulta(Consulta* c);
	Socket* getSocket(unsigned int id);
	virtual void run();
	void cerrarServidor();
	void cerrarSocket();
	void guardar(std::string& linea);
	std::string getNombreAtributo(int pos, int nTabla);
private:
	Socket s_socket;
	Cola<Consulta*>* consultas;
	Cola<Respuesta*> respuestas;
	std::vector<Worker*> workers;
	Hilo_Enviador* enviador;
	std::vector<Hilo_Recibidor*> recibidores;
	Validador& validator;
	Data::Datos datos;
	Manejador_Agentes agent_handler;
};

#endif /* SERVIDOR_H_ */
